package com.atguigu.state.money;

/**
 * 流程顺序：
 * 
 * <pre>
 * 1. 订单生成
 * 2. 已审核
 * 3. 已发布
 * 
 * 4. 待付款
 * 5. 已付款
 * 6. 已完结
 * </pre>
 */

/** 订单生成 */
class GenerateState extends AbstractState {

	/**
	 * 审核
	 */
	@Override
	public void checkEvent(Context context) {
		context.setState(new ReviewState());
	}

	/**
	 * 审核失败
	 */
	@Override
	public void checkFailEvent(Context context) {
		context.setState(new FeedBackState());
	}

	@Override
	public String getCurrentState() {
		return StateEnum.GENERATE.getValue();
	}
}

/** 已审核 */
class ReviewState extends AbstractState {

	/**
	 * 定价发布
	 */
	@Override
	public void makePriceEvent(Context context) {
		context.setState(new PublishState());
	}

	@Override
	public String getCurrentState() {
		return StateEnum.REVIEWED.getValue();
	}

}

/** 已发布 */
class PublishState extends AbstractState {

	/**
	 * 接单
	 */
	@Override
	public void acceptOrderEvent(Context context) {
		// 把当前状态设置为 NotPayState。。。
		// 至于应该变成哪个状态，有流程图来决定
		context.setState(new NotPayState());
	}

	/**
	 * 无人接单失效
	 */
	@Override
	public void notPeopleAcceptEvent(Context context) {
		context.setState(new FeedBackState());
	}

	@Override
	public String getCurrentState() {
		return StateEnum.PUBLISHED.getValue();
	}
}

/** 待付款 */
class NotPayState extends AbstractState {

	/**
	 * 付款
	 */
	@Override
	public void payOrderEvent(Context context) {
		context.setState(new PaidState());
	}

	/**
	 * 反馈
	 */
	@Override
	public void feedBackEvent(Context context) {
		context.setState(new FeedBackState());
	}

	@Override
	public String getCurrentState() {
		return StateEnum.NOT_PAY.getValue();
	}
}

/** 已付款 */
class PaidState extends AbstractState {

	/**
	 * 反馈
	 */
	@Override
	public void feedBackEvent(Context context) {
		context.setState(new FeedBackState());
	}

	@Override
	public String getCurrentState() {
		return StateEnum.PAID.getValue();
	}
}

/** 已完结 */
class FeedBackState extends AbstractState {

	@Override
	public String getCurrentState() {
		return StateEnum.FEED_BACKED.getValue();
	}
}
